<?php
App::uses('AppController', 'Controller');

/**
 * Anuncios Controller
 *
 * @property Anuncio $Anuncio
 */
class AnunciosController extends AppController {
	
	var $components = array('Anuncioservice', 'pagSeguro');
	var $tiposDeTransporte = array(0=>'a pé', 1=>'de automóvel', 2=>'de transporte público');
	var $tiposDeEstadia = array(1=>'Casa', 2=>'Apartamento');
	
	function beforeFilter(){
		parent::beforeFilter();
		$this->Auth->allow('cidades', 'view_completo', 'view', 'busca_generica');
	}
	
	public function cidades($id_cidades) {
		if(!empty($this->request->data) || $this->Session->check('search.Conditions')){// Efetuar busca
			// NOVOS DADOS COLOCADOS
			if(!empty($this->request->data)){
				$conditions = $this->Anuncioservice->buscaComplexaConditions($this->request->data, $id_cidades);
				$order = $this->Anuncioservice->order;
				$this->paginate = array(
								'conditions'=> $conditions,
								'order' => $order,
								'limit'=>5);
				//SALVAR DADOS NA SESSAO
				$this->Session->write('search.Conditions', $conditions);
				$this->Session->write('search.Order', $order);
				$this->Session->write('search.data', $this->request->data);
			}
			// RECUPERAR DADOS DA SESSAO
			else{
				$conditions = $this->Session->read('search.Conditions');
				$conditions['cidade_id'] = $id_cidades;
				$this->Session->write('search.Conditions', $conditions);
				$this->paginate = array(
							'conditions'=>$this->Session->read('search.Conditions'),
							'limit'=>5,
							'order'=>$this->Session->read("search.Order"));
			}
			$all = $this->paginate();
			$this->request->data = $this->Session->read('search.data');
		}
		else{ // Buscar todos
			$this->paginate = array(
							'conditions'=>array('cidade_id'=>$id_cidades, 'Anuncio.ativo'=>1),
							'limit'=>5,
							'order'=>'RAND()');
			$all = $this->paginate();
		}
		
		// Dados da cidade para a View
		$this->loadModel('Cidade');
		$cidade = $this->Cidade->findByIdCidade($id_cidades);
		$this->set('idCidade', $id_cidades);
		$this->set('nomeCidade', $cidade['Cidade']['cidade']);
		
		//Anúncios
		$this->set('anuncio', $all);
		$this->set('dadoscidade', $this->Cidade->Dados->findByCidadesId($id_cidades));
		// Top Ads
		$this->set('top', $this->Anuncioservice->top($id_cidades));
	}
	

	public function busca_generica(){
		if(!empty($this->request->data) || $this->Session->check('search.Conditions')){ // Efetuar busca
			
			// NOVOS DADOS COLOCADOS
			if(!empty($this->request->data)){
				$conditions = $this->Anuncioservice->buscaComplexaConditions($this->request->data);
				$order = $this->Anuncioservice->order;
				$this->paginate = array(
								'conditions'=> $conditions,
								'order' => $order,
								'limit'=>5);
				//SALVAR DADOS NA SESSAO
				$this->Session->write('search.Conditions', $conditions);
				$this->Session->write('search.Order', $order);
				$this->Session->write('search.data', $this->request->data);
			}
			// RECUPERAR DADOS DA SESSAO
			else{
				//Excluir criterio de cidade
				$criterios = $this->Session->read("search.Conditions");
				unset($criterios['cidade_id']);
				$this->paginate = array(
							'conditions'=>$criterios,
							'limit'=>5,
							'order'=>$this->Session->read("search.Order"));
			}
			$all = $this->paginate();
			$this->request->data = $this->Session->read('search.data');
		}
		else{ // Buscar todos
			$this->paginate = array(
							'conditions'=>array('Anuncio.ativo'=>1),
							'limit'=>5,
							'order'=>'RAND()');
			$all = $this->paginate();
		}
		
		//Anúncios
		$this->set('anuncio', $all);
		
		// Dados da cidade para a View
		$this->loadModel('Cidade');
		$this->set('cidades',$this->Cidade->find('list'));
		$this->set('idCidade', 0);
		$this->set('nomeCidade', __('Busca'));
		
		// Top Ads
		$this->set('top', $this->Anuncioservice->top());
		$this->render('cidades');
	}
	
	public function meus_anuncios(){
		$view = new View($this);
        $html = $view->loadHelper('Html');
		$this->set('anuncios', $this->Anuncio->findAllByUsuarioId($this->usuarioAtual['id_usuarios']));
		
		
		$link_fotos = $html->url(array('controller'=>'fotos', 'action'=>'edit'), true);
		$this->set('url_ajax_fotos', $link_fotos);
		$link_editar = $html->url(array('action'=>'edit'), true);
		$this->set('url_ajax_edit', $link_editar); 
	}
	
	public function view_completo($id=null){
		$this->Anuncio->id = $id;
		if (!$this->Anuncio->exists() || !$this->Anuncio->isVisible($this->Anuncio->read(null, $id), $this->usuarioAtual)) {
			$this->render('anuncio_inativo');
		}
		else{
			$this->Anuncio->incrementaContador($id);
			$this->set('anuncio', $this->Anuncio->read(null, $id));
			$this->set('meiosDeTransporte', $this->tiposDeTransporte);
			$this->set('tiposDeEstadia', $this->tiposDeEstadia);
			$this->set('nao_midias', true);
			$this->set('para_facebook', true);
			$this->render('view');
		}
	}
	
	public function view($id = null) {
		$this->layout = null;
		$this->Anuncio->id = $id;
		$anuncio = $this->Anuncio->read(null, $id);
		if (!$this->Anuncio->exists() || !$this->Anuncio->isVisible($anuncio, $this->usuarioAtual)) {
			$this->render('anuncio_inativo');
		}
		else{
			$this->Anuncio->incrementaContador($id);
			$this->set('anuncio', $anuncio);
			$this->set('meiosDeTransporte', $this->tiposDeTransporte);
		}
	}

	public function add() {
		if ($this->request->is('post')) {
			$this->Anuncio->create();
			$this->request->data['Anuncio']['usuario_id'] = $this->usuarioAtual['id_usuarios'];
			$this->request->data['Fotos']['id_fotos'] = "";
			if ($this->Anuncio->saveAssociated($this->request->data, array('validate'=> 'first', 'atomic'=>true))) {
				$this->Session->setFlash(__('The anuncio has been saved'));
				$this->redirect(array('action' => 'meus_anuncios'));
			} else {
				$this->Session->setFlash(__('The anuncio could not be saved. Please, try again.'));
			}
		}
		$cidades = $this->Anuncio->Cidade->find('list');
		$this->set('cidades', $cidades);
		$this->set('novo_pacotes', $this->Anuncio->Pacote->find('list'));
		$this->set('tipo_de_estadia', $this->tiposDeEstadia);
		$this->set('tipo_de_transporte', $this->tiposDeTransporte);		
	}

	
	public function edit($id = null) {
		$this->Anuncio->id = $id;
		if (!$this->Anuncio->exists() || 
		!$this->Anuncio->anuncioPertenceAoUsuario($this->Anuncio->read('usuario_id' ,$id), $this->usuarioAtual['id_usuarios'])) {
			throw new NotFoundException(__('Invalid anuncio'));
		}
		if ($this->request->is('post') || $this->request->is('put')) {
			if ($this->Anuncio->save($this->request->data)) {
				$this->Session->setFlash(__('The anuncio has been saved'));
				$this->redirect(array('action' => 'meus_anuncios'));
			} else {
				$this->Session->setFlash(__('The anuncio could not be saved. Please, try again.'));
			}
		} else {
			$this->request->data = $this->Anuncio->read(null, $id);
		}
		$usuarios = $this->Anuncio->Usuario->find('list');
		$cidades = $this->Anuncio->Cidade->find('list');
		$this->set('tipo_de_estadia', $this->tiposDeEstadia);
		$this->set('tipo_de_transporte', $this->tiposDeTransporte);
		$this->set('cidades', $cidades);
		$this->set(compact('usuarios'));
	}

	public function delete($id = null) {
		if (!$this->request->is('post')|| 
		!$this->Anuncio->anuncioPertenceAoUsuario($this->Anuncio->read('usuario_id' ,$id), $this->usuarioAtual['id_usuarios'])) {
			throw new MethodNotAllowedException();
		}
		$this->Anuncio->id = $id;
		if (!$this->Anuncio->exists()) {
			throw new NotFoundException(__('Anúncio inválido'));
		}
		if ($this->Anuncio->delete()) {
			$this->Session->setFlash(__('Anúncio apagado com sucesso'));
			$this->redirect(array('action'=>'meus_anuncios'));
		}
		$this->Session->setFlash(__('Anúncio não foi excluído! Tente novamente'));
		$this->redirect(array('action' => 'meus_anuncios'));
	}
	
	public function pagamentos($id_anuncio){
		if (!$this->Anuncio->anuncioPertenceAoUsuario($this->Anuncio->read('usuario_id' ,$id_anuncio), $this->usuarioAtual['id_usuarios'])) {
			throw new MethodNotAllowedException();
		}
		if(!empty($this->request->data['Anuncio']['novo_pacote'])){
			$this->Anuncio->id = $id_anuncio;
			$teste = $this->Anuncio->save($this->request->data);
			if($teste){
				$this->redirect('pagamentoPagSeguro/'.$id_anuncio);
			}
			else $this->Session->setFlash(__('Pacote não foi alterado! Tente novamente'));
				
		}
		else if(!empty($this->request->data) && !empty($this->request->data['Anuncio']['novo_pacote'])) $this->Session->setFlash(__('Escolha uma opção de pacote!'));
		$anuncio = $this->Anuncio->findByIdAnuncios($id_anuncio);
		$pacotes = $this->Anuncio->Pacote->find('all', array('conditions'=>array('id >'=> $anuncio['Anuncio']['pacote_id'])));
		
		$this->set('id_anuncio', $id_anuncio);
		$this->set('anuncio', $anuncio);
		$this->set('pacotes', $pacotes);
	}
	
	public function pagamentoPagSeguro($id_anuncio){
		//pr($this->EmailConfig);s
		if (!$this->Anuncio->anuncioPertenceAoUsuario($this->Anuncio->read('usuario_id' ,$id_anuncio), $this->usuarioAtual['id_usuarios'])) {
			throw new MethodNotAllowedException();
		}
		$anuncio = $this->Anuncio->findByIdAnuncios($id_anuncio);
		$dados_compra = $this->Anuncio->Pacote->dados_compra($id_anuncio, $anuncio['Anuncio']['pacote_id'], $anuncio['Anuncio']['novo_pacote']);
		$codigo = $this->pagSeguro->efetuarPagamento($anuncio, $this->usuarioAtual, $dados_compra);
		$this->redirect('https://pagseguro.uol.com.br/v2/checkout/payment.html?code='.$codigo);
	}
}
